package pe.gob.mintra.trabajadoreshogar.action;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.servlet.http.HttpSession;

import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import pe.gob.mintra.trabajadoreshogar.bean.DatLab;
import pe.gob.mintra.trabajadoreshogar.bean.Departamento;
import pe.gob.mintra.trabajadoreshogar.bean.Distrito;
import pe.gob.mintra.trabajadoreshogar.bean.Empleador;
import pe.gob.mintra.trabajadoreshogar.bean.Provincia;
import pe.gob.mintra.trabajadoreshogar.bean.Sucursal;
import pe.gob.mintra.trabajadoreshogar.bean.TipoDocumentoIdentidad;
import pe.gob.mintra.trabajadoreshogar.bean.TipoVia;
import pe.gob.mintra.trabajadoreshogar.bean.Trabajador;
import pe.gob.mintra.trabajadoreshogar.bean.Usuario;
import pe.gob.mintra.trabajadoreshogar.bean.Zona;
import pe.gob.mintra.trabajadoreshogar.service.DatLabService;
import pe.gob.mintra.trabajadoreshogar.service.EmpleadorService;
import pe.gob.mintra.trabajadoreshogar.service.MantenimientoService;
import pe.gob.mintra.trabajadoreshogar.service.SucursalService;
import pe.gob.mintra.trabajadoreshogar.util.Utilitario;

@ManagedBean(name = "empleadorAction")
@SessionScoped
public class EmpleadorAction implements Serializable {

	private List<Departamento> lstDepartamento;
	private List<Provincia> lstProvincia;
	private List<Distrito> lstDistrito;
	private List<TipoVia> lstTipoVia;
	private List<Zona> lstZona;
	private List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad;
	private Departamento objDepartamento = new Departamento();
	private Provincia objProvincia = new Provincia();
	private Distrito objDistrito = new Distrito();
	private TipoVia objTipoVia = new TipoVia();
	private Zona objZona = new Zona();
	private List<Sucursal> lstSucursal;
	private String nroDocumento;
	private Sucursal objSucursal = new Sucursal();

	private Empleador objEmpleador;

	@ManagedProperty(name = "objDatLab", value = "#{objDatLab}")
	private DatLab objDatLab = null;
	@ManagedProperty("#{usuarioAction.objUsuario}")
	private Usuario objUsuario;
	
	
	

	

	private TipoDocumentoIdentidad objTipoDocumentoIdentidad = new TipoDocumentoIdentidad();
	private MantenimientoService servicioMantenimiento = new MantenimientoService();
	private boolean muestraBotonAgregarDireccion = false;
	private boolean muestraBotonActualizarDireccion = false;
	private boolean muestraBotonAgregarEmpleadorPersona = true;
	private boolean muestraBotonActualizarEmpleadorPersona = true;
	private boolean muestraBotonGrabarEmpleador = false;
	private boolean deshabilitaBusqueda = false;

	private Sucursal sucursalSeleccionada = null;
	private Utilitario objUtilitario = new Utilitario();

	public Usuario getObjUsuario() {
		return objUsuario;
	}

	public void setObjUsuario(Usuario objUsuario) {
		this.objUsuario = objUsuario;
	}

	public boolean isMuestraBotonActualizarDireccion() {
		return muestraBotonActualizarDireccion;
	}

	public void setMuestraBotonActualizarDireccion(
			boolean muestraBotonActualizarDireccion) {
		this.muestraBotonActualizarDireccion = muestraBotonActualizarDireccion;
	}

	public Sucursal getSucursalSeleccionada() {
		return sucursalSeleccionada;
	}

	public void setSucursalSeleccionada(Sucursal sucursalSeleccionada) {
		this.sucursalSeleccionada = sucursalSeleccionada;
	}
	
	
	

	

	public EmpleadorAction() {
		System.out.println("SE INICIALIZA EMPLEADOR");
		muestraBotonAgregarDireccion = true;

		muestraBotonAgregarEmpleadorPersona = true;

		
		lstDepartamento = new ArrayList<Departamento>();
		lstDepartamento = servicioMantenimiento.listarDepartamento();
		lstProvincia = new ArrayList<Provincia>();
		lstProvincia = servicioMantenimiento.listarProvincia(lstDepartamento
				.get(0));
		lstDistrito = new ArrayList<Distrito>();
		lstDistrito = servicioMantenimiento.listarDistrito(lstProvincia.get(0));
		lstTipoVia = new ArrayList<TipoVia>();
		lstTipoVia = servicioMantenimiento.listarTipoVia();
		lstZona = new ArrayList<Zona>();
		lstZona = servicioMantenimiento.listarZona();
		lstTipoDocumentoIdentidad = new ArrayList<TipoDocumentoIdentidad>();
		lstTipoDocumentoIdentidad = servicioMantenimiento
				.listarTipoDocumentoIdentidad();

		lstSucursal = new ArrayList<Sucursal>();
		
		muestraBotonGrabarEmpleador = true;
		muestraBotonActualizarDireccion = true;
		muestraBotonAgregarDireccion = true;
		System.out.println("EmpleadorAction");
		
		//objEmpleador = new Empleador();

	}

	public boolean isMuestraBotonActualizarEmpleadorPersona() {
		return muestraBotonActualizarEmpleadorPersona;
	}

	public void setMuestraBotonActualizarEmpleadorPersona(
			boolean muestraBotonActualizarEmpleadorPersona) {
		this.muestraBotonActualizarEmpleadorPersona = muestraBotonActualizarEmpleadorPersona;
	}

	public List<Departamento> getLstDepartamento() {
		return lstDepartamento;
	}

	public void setLstDepartamento(List<Departamento> lstDepartamento) {
		this.lstDepartamento = lstDepartamento;
	}

	public List<Provincia> getLstProvincia() {
		return lstProvincia;
	}

	public void setLstProvincia(List<Provincia> lstProvincia) {
		this.lstProvincia = lstProvincia;
	}

	public Departamento getObjDepartamento() {
		return objDepartamento;
	}

	public void setObjDepartamento(Departamento objDepartamento) {
		this.objDepartamento = objDepartamento;
	}

	public Provincia getObjProvincia() {
		return objProvincia;
	}

	public void setObjProvincia(Provincia objProvincia) {
		this.objProvincia = objProvincia;
	}

	public List<Distrito> getLstDistrito() {
		return lstDistrito;
	}

	public void setLstDistrito(List<Distrito> lstDistrito) {
		this.lstDistrito = lstDistrito;
	}

	public Distrito getObjDistrito() {
		return objDistrito;
	}

	public void setObjDistrito(Distrito objDistrito) {
		this.objDistrito = objDistrito;
	}

	public List<TipoVia> getLstTipoVia() {
		return lstTipoVia;
	}

	public void setLstTipoVia(List<TipoVia> lstTipoVia) {
		this.lstTipoVia = lstTipoVia;
	}

	public TipoVia getObjTipoVia() {
		return objTipoVia;
	}

	public void setObjTipoVia(TipoVia objTipoVia) {
		this.objTipoVia = objTipoVia;
	}

	public List<Zona> getLstZona() {
		return lstZona;
	}

	public void setLstZona(List<Zona> lstZona) {
		this.lstZona = lstZona;
	}

	public Zona getObjZona() {
		return objZona;
	}

	public void setObjZona(Zona objZona) {
		this.objZona = objZona;
	}

	public List<TipoDocumentoIdentidad> getLstTipoDocumentoIdentidad() {
		return lstTipoDocumentoIdentidad;
	}

	public void setLstTipoDocumentoIdentidad(
			List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad) {
		this.lstTipoDocumentoIdentidad = lstTipoDocumentoIdentidad;
	}

	public TipoDocumentoIdentidad getObjTipoDocumentoIdentidad() {
		return objTipoDocumentoIdentidad;
	}

	public void setObjTipoDocumentoIdentidad(
			TipoDocumentoIdentidad objTipoDocumentoIdentidad) {
		this.objTipoDocumentoIdentidad = objTipoDocumentoIdentidad;
	}

	public Empleador getObjEmpleador() {
		return objEmpleador;
	}

	public void setObjEmpleador(Empleador objEmpleador) {
		this.objEmpleador = objEmpleador;
	}

	public String getNroDocumento() {
		return nroDocumento;
	}

	public void setNroDocumento(String nroDocumento) {
		this.nroDocumento = nroDocumento;
	}

	public List<Sucursal> getLstSucursal() {
		return lstSucursal;
	}

	public void setLstSucursal(List<Sucursal> lstSucursal) {
		this.lstSucursal = lstSucursal;
	}

	public Sucursal getObjSucursal() {
		return objSucursal;
	}

	public void setObjSucursal(Sucursal objSucursal) {
		this.objSucursal = objSucursal;
	}

	public boolean isMuestraBotonAgregarDireccion() {
		return muestraBotonAgregarDireccion;
	}

	public void setMuestraBotonAgregarDireccion(
			boolean muestraBotonAgregarDireccion) {
		this.muestraBotonAgregarDireccion = muestraBotonAgregarDireccion;
	}

	public boolean isMuestraBotonAgregarEmpleadorPersona() {
		return muestraBotonAgregarEmpleadorPersona;
	}

	public void setMuestraBotonAgregarEmpleadorPersona(
			boolean muestraBotonAgregarEmpleadorPersona) {
		this.muestraBotonAgregarEmpleadorPersona = muestraBotonAgregarEmpleadorPersona;
	}

	public boolean isMuestraBotonGrabarEmpleador() {
		return muestraBotonGrabarEmpleador;
	}

	public void setMuestraBotonGrabarEmpleador(
			boolean muestraBotonGrabarEmpleador) {
		this.muestraBotonGrabarEmpleador = muestraBotonGrabarEmpleador;
	}

	public void cargarProvincia(AjaxBehaviorEvent event) {

		lstProvincia = new ArrayList<Provincia>();

		objDepartamento.setV_coddep(objSucursal.getV_coddep());

		lstProvincia = servicioMantenimiento.listarProvincia(objDepartamento);
		objProvincia.setV_coddep(objDepartamento.getV_coddep());
		lstDistrito = servicioMantenimiento.listarDistrito(lstProvincia.get(0));

	}

	public void cargarDistrito(AjaxBehaviorEvent event) {

		lstDistrito = new ArrayList<Distrito>();

		objProvincia.setV_coddep(objSucursal.getV_coddep());
		objProvincia.setV_codpro(objSucursal.getV_codpro());

		lstDistrito = servicioMantenimiento.listarDistrito(objProvincia);

	}

	public boolean isDeshabilitaBusqueda() {
		return deshabilitaBusqueda;
	}

	public void setDeshabilitaBusqueda(boolean deshabilitaBusqueda) {
		this.deshabilitaBusqueda = deshabilitaBusqueda;
	}

	public DatLab getObjDatLab() {
		return objDatLab;
	}

	public void setObjDatLab(DatLab objDatLab) {
		this.objDatLab = objDatLab;
	}
	
	Empleador emplEntrada = new Empleador();

	public void obtenerEmpleador() {
		
		
		System.out.println("ENTRA A OBTENER EMPLEADOR");
		
		
		
		SucursalService servicioSucursal = new SucursalService();
		lstSucursal = new ArrayList<Sucursal>();
		EmpleadorService servicioEmpleador = new EmpleadorService();
		
		
		if(!emplEntrada.getV_numdoc().equals("-2")){
			
			emplEntrada.setV_numdoc(emplEntrada.getV_numdoc());
			emplEntrada.setV_codtdocide(emplEntrada.getV_codtdocide());
			nroDocumento=emplEntrada.getV_numdoc();
			objTipoDocumentoIdentidad.setV_codtdocide(emplEntrada.getV_codtdocide());
			
		}else{
			emplEntrada.setV_numdoc(nroDocumento);
			emplEntrada.setV_codtdocide(objTipoDocumentoIdentidad
					.getV_codtdocide());
		}
		
		
				
		Empleador o = null;
		

		if (objTipoDocumentoIdentidad.getV_codtdocide().equals("09")) {
			muestraBotonAgregarDireccion = true;
			o = servicioEmpleador.listarEmpleador(emplEntrada);
						
			if (o != null) {
				
				
				objEmpleador = o;

				objEmpleador.setV_codtdocide(objTipoDocumentoIdentidad
						.getV_codtdocide());
				lstSucursal = servicioSucursal.listarSucursal(objEmpleador);

				muestraBotonGrabarEmpleador = false;
				deshabilitaBusqueda = true;
				
				
			
				
				
			} else {
				objEmpleador = new Empleador();
				
				objEmpleador.setV_razsoc("NO SE ENCONTRO EMPLEADOR");
				muestraBotonGrabarEmpleador = true;
				
				

			}
		} else {
			
				
				muestraBotonAgregarDireccion = true;
				
				/*
				emplEntrada.setV_codtdocide(objTipoDocumentoIdentidad
						.getV_codtdocide());
				emplEntrada.setV_numdoc(nroDocumento);
				*/
				
				o = servicioEmpleador.listarEmpleadorPersonaNat(emplEntrada);
				
				
				if (o != null) {
					
					
						
							deshabilitaBusqueda = true;
							muestraBotonAgregarDireccion = false;
							muestraBotonActualizarEmpleadorPersona = false;
							System.out.println("DISTINTO NULO");
							objEmpleador = o;

							objEmpleador.setV_flgemp("N");
							objEmpleador.setV_razsoc(objEmpleador.getV_apepater() + " "
									+ objEmpleador.getV_apemater() + " "
									+ objEmpleador.getV_nombres());
							lstSucursal = servicioSucursal
									.listarSucursalDomicilio(objEmpleador);

							System.out.println("" + objEmpleador.getV_numdoc());
							System.out.println("" + objEmpleador.getV_razsoc());
							System.out.println("" + objEmpleador.getV_codtdocide());

							if (lstSucursal.size() == 0) {
								
								muestraBotonGrabarEmpleador = true;
							} else {

								muestraBotonGrabarEmpleador = false;
							}
							
													
						
					
					
					
					
					
					

				} else {
					deshabilitaBusqueda = true;
					objEmpleador = new Empleador();
					
					objEmpleador.setV_razsoc("NO SE ENCONTRO EMPLEADOR");
					
					muestraBotonAgregarEmpleadorPersona = false;
					
					muestraBotonActualizarEmpleadorPersona = true;
				   
				
				}
				
			
			

			

		}

		

	}

	public void limpiarEmpleador() {
		nroDocumento = "";
		// objEmpleador.setV_razsoc("");
		objEmpleador = new Empleador();
		lstSucursal = new ArrayList<Sucursal>();
		/*
		 * Sucursal oSuc= new Sucursal(); oSuc.setN_codsuc(-1);
		 * oSuc.setV_dirsuc("NO EXISTEN DIRECCIONES PARA MOSTRAR");
		 * lstSucursal.add(oSuc);
		 */
		muestraBotonGrabarEmpleador = true;
		muestraBotonAgregarEmpleadorPersona = true;
		muestraBotonAgregarDireccion = true;
		deshabilitaBusqueda = false;
		muestraBotonActualizarEmpleadorPersona = true;
		muestraBotonActualizarDireccion = true;
		
		emplEntrada = new Empleador();

	}

	public void agregarEmpleadorPersona() {
		System.out.println("ENTRO A AGREGAR NUEVA PERSONA ");
		EmpleadorService servicioEmpleador = new EmpleadorService();
		objEmpleador.setV_codemp(nroDocumento);
		objEmpleador.setV_codtdocide(objTipoDocumentoIdentidad
				.getV_codtdocide());
		System.out.println("" + objEmpleador.getV_numdoc());
		System.out.println("" + objEmpleador.getV_apepater());

		// SETEA CAMPOS AUDITORIA
		objEmpleador.setV_codsis(objUsuario.getV_codsis());
		objEmpleador.setV_codusureg(objUsuario.getV_codusu());
		objEmpleador.setV_hostreg(objUtilitario.hostRealizaAccion());

		servicioEmpleador.insertarEmpleadorPersona(objEmpleador);
		muestraBotonAgregarEmpleadorPersona = true;
		muestraBotonAgregarDireccion = true;
		obtenerEmpleador();
	}

	public void actualizarEmpleadorPersona() {
		System.out.println("ENTRO A ACTUALIZAR ");
		EmpleadorService servicioEmpleador = new EmpleadorService();
		System.out.println("" + objEmpleador.getV_codemp());
		System.out.println("" + objEmpleador.getV_codtdocide());

		// SETEA CAMPOS AUDITORIA
		objEmpleador.setV_codusumod(objUsuario.getV_codusu());
		objEmpleador.setV_hostmod(objUtilitario.hostRealizaAccion());
		objEmpleador.setV_codsismod(objUsuario.getV_codsis());

		servicioEmpleador.actualizarEmpleadorPersona(objEmpleador);

		muestraBotonAgregarDireccion = true;

		obtenerEmpleador();
	}

	public void grabarEmpleador() {

		EmpleadorService servicioEmpleador = new EmpleadorService();

		// SETEA CAMPOS AUDITORIA
		objEmpleador.setV_codusureg(objUsuario.getV_codusu());
		objEmpleador.setV_hostreg(objUtilitario.hostRealizaAccion());

		if (objEmpleador.getV_codtdocide().equals("09")) {

			objEmpleador.setN_codsuc(objSucursal.getN_codsuc());
			servicioEmpleador.insertarEmpresa(objEmpleador);

		} else {

			objEmpleador.setN_numcordom(objSucursal.getN_codsuc());

			servicioEmpleador.insertarEmpresaPersona(objEmpleador);

		}

		muestraBotonGrabarEmpleador = true;

	}

	public void grabarDireccionEmpleador() {
		System.out.println("ENTRA A GRABAR SUCURSAL");
		SucursalService servicioSucursal = new SucursalService();
		objSucursal.setV_codemp(objEmpleador.getV_numdoc());
		objSucursal.setV_codtdocide(objEmpleador.getV_codtdocide());
		
		objSucursal.setV_coddep("15");
		objSucursal.setV_codpro("01");

		// SETEA DATOS AUDITORIA
		objSucursal.setV_nomusureg(objUsuario.getV_codusu());
		objSucursal.setV_hostreg(objUtilitario.hostRealizaAccion());
		objSucursal.setV_codsis(objUsuario.getV_codsis());

		System.out.println(objSucursal.getV_codemp());
		System.out.println(objSucursal.getV_codtdocide());
		System.out.println("" + objSucursal.getV_desdom());

		servicioSucursal.insertarSucursalDomicilio(objSucursal);
		obtenerEmpleador();
		objSucursal = new Sucursal();

	}

	public void actualizarDireccionEmpleador() {
		SucursalService servicioSucursal = new SucursalService();

		// SETEA DATOS AUDITORIA
		objSucursal.setV_nomusumod(objUsuario.getV_codusu());
		objSucursal.setV_hostmod(objUtilitario.hostRealizaAccion());

		servicioSucursal.actualizarSucursalDomicilio(objSucursal);

		obtenerEmpleador();
	}

	public void seleccionar(SelectEvent event) {
		System.out.println(sucursalSeleccionada.getV_dirsuc());
		objSucursal = sucursalSeleccionada;
		objDepartamento.setV_coddep(objSucursal.getV_coddep());
		lstProvincia = servicioMantenimiento.listarProvincia(objDepartamento);
		objProvincia.setV_coddep(objSucursal.getV_coddep());
		objProvincia.setV_codpro(objSucursal.getV_codpro());
		lstDistrito = servicioMantenimiento.listarDistrito(objProvincia);

		if (objEmpleador.getV_codtdocide().equals("09")) {
			muestraBotonActualizarDireccion = true;
		} else {
			muestraBotonActualizarDireccion = false;
		}

		objEmpleador.setObjSucursal(objSucursal);

		System.out.println(objSucursal.getV_coddep());
		System.out.println(objSucursal.getV_codpro());
		System.out.println(objSucursal.getV_coddis());

		ExternalContext externalContext = FacesContext.getCurrentInstance()
				.getExternalContext();
		HttpSession session = (HttpSession) externalContext.getSession(false);
		session.setAttribute("objEmpleador", objEmpleador);

	}

	public void muestraNuevaDireccion() {
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("esNuevaDireccionEmple", true);
		
		lstDepartamento = new ArrayList<Departamento>();
		lstProvincia = new ArrayList<Provincia>();
		lstDistrito = new ArrayList<Distrito>();
		
		objSucursal = new Sucursal();
		objSucursal.setN_codsuc(-2);
		
		Departamento objDepartamento = new Departamento();
		objDepartamento.setV_coddep("15");
		lstDepartamento=servicioMantenimiento.listarDepartamentoxCodigo(objDepartamento);
		lstProvincia=servicioMantenimiento.listarProvincia(objDepartamento);
				
		for(Provincia objProv:lstProvincia){
					if(objProv.getV_codpro().equals("01")){
						lstDistrito=servicioMantenimiento.listarDistrito(objProv);
					}
					
		}
				
			
	}

	public void muestraActualizarDireccion() {
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("esNuevaDireccionEmple", false);

		lstDepartamento = new ArrayList<Departamento>();
		lstDepartamento = servicioMantenimiento.listarDepartamento();
		lstProvincia = new ArrayList<Provincia>();
		
		Departamento d= new Departamento();
		d.setV_coddep(objSucursal.getV_coddep());
		lstProvincia = servicioMantenimiento.listarProvincia(d);
		
		Provincia p = new Provincia();
		p.setV_coddep(objSucursal.getV_coddep());
		p.setV_codpro(objSucursal.getV_codpro());
		lstDistrito = new ArrayList<Distrito>();
		lstDistrito = servicioMantenimiento.listarDistrito(p);

	}

	public void inicializarEmpleador() {

		objDatLab = new DatLab();
		//objEmpleador = null;
		objEmpleador = new Empleador();
		
		nroDocumento="";
		objTipoDocumentoIdentidad.setV_codtdocide(lstTipoDocumentoIdentidad.get(0).getV_codtdocide());
		

	}

}
